/**
*
*/
package de.yaams.extensions.rgssproject.database.form;
import java.util.ArrayList;
import org.jruby.RubyArray;
import org.jruby.RubyBoolean;
import org.jruby.RubyHash;
import org.jruby.RubyObject;
import org.jruby.runtime.builtin.IRubyObject;
import de.yaams.extensions.jruby.RubyHelper;
import de.yaams.extensions.rgssproject.database.JavaTable;
import de.yaams.extensions.rgssproject.database.SystemGObject;
import de.yaams.maker.helper.JavaHelper;
import de.yaams.maker.helper.gui.form.FormCheckbox;
import de.yaams.maker.helper.gui.form.FormComboBox;
import de.yaams.maker.helper.gui.form.FormElement;
import de.yaams.maker.helper.gui.form.FormElementChangeListener;
import de.yaams.maker.helper.gui.form.FormInfo;
import de.yaams.maker.helper.gui.form.FormNumberSpinner;
import de.yaams.maker.helper.gui.form.FormTextField;
import de.yaams.maker.helper.gui.form.core.FormBuilder;
import de.yaams.maker.helper.language.I18N;
/**
* @author abt
*
*/
public class RubyForm {
/**
* Add an String
*
* @param name
* @param i
* @return
*/
public static FormTextField getString(final String name, final String id, final RubyObject object) {
// return (FormTextField) new FormTextField(name,
// object.getInstanceVariable(id).asJavaString())
// .addChangeListener(new FormElementChangeListener() {
//
// @Override public void stateChanged(FormElement form) {
// object.setInstanceVariable(id,
// RubyString.newString(object.getRuntime(),
// form.getContentAsString()));
//
// }
// });
return getString(name, object.getInstanceVariable(id));
}
/**
* Add an String
*
* @param name
* @param i
* @return
*/
public static FormTextField getString(final String name, final IRubyObject irb) {
return (FormTextField) new FormTextField(name, RubyHelper.toString(irb)).addChangeListener(new FormElementChangeListener() {
@Override
public void stateChanged(FormElement form) {
RubyHelper.setString(irb, form.getContentAsString());
}
});
}
/**
* Add an String
*
* @param name
* @param i
* @return
*/
public static FormTextField getStringFromAry(final String name, final RubyArray ra, final int pos) {
return (FormTextField) new FormTextField(name, (String) ra.get(pos)).addChangeListener(new FormElementChangeListener() {
@Override
public void stateChanged(FormElement form) {
ra.remove(pos);
ra.add(pos, form.getContentAsString());
}
});
}
/**
* Add an String
*
* @param name
* @param i
* @return
*/
public static FormNumberSpinner getNumber(final String name, final Object holder, final Object index) {
return (FormNumberSpinner) new FormNumberSpinner(name, RubyHelper.toInt(holder, index)).addChangeListener(new FormElementChangeListener() {
@Override
public void stateChanged(FormElement form) {
RubyHelper.setNum(holder, index, form.getContentAsString());
}
});
}
/**
* Add Support for Toner
*
* @param f
* @param base
* @param tone
*/
public static void addTone(FormBuilder f, final String base, IRubyObject tone) {
// add toner
f.addElement(base + "blue", getNumber(I18N.t("Blue"), tone, "@blue").setMinMax(-255, 255, 1));
f.addElement(base + "red", getNumber(I18N.t("Red"), tone, "@red").setMinMax(-255, 255, 1));
f.addElement(base + "green", getNumber(I18N.t("Green"), tone, "@green").setMinMax(-255, 255, 1));
f.addElement(base + "gray", getNumber(I18N.t("Gray"), tone, "@gray").setMinMax(0, 255, 1));
}
/**
* Add Support for Color
*
* @param f
* @param base
* @param color
*/
public static void addColor(FormBuilder f, final String base, IRubyObject color) {
// add color
// f.addElement(base + "blue", getNumber(I18N.t("Blue"), color,
// "@blue").setMinMax(0, 255, 1));
// f.addElement(base + "red", getNumber(I18N.t("Red"), color,
// "@red").setMinMax(0, 255, 1));
// f.addElement(base + "green", getNumber(I18N.t("Green"), color,
// "@green").setMinMax(0, 255, 1));
// f.addElement(base + "alpha", getNumber(I18N.t("Alpha"), color,
// "@alpha").setMinMax(0, 255, 1));
f.addElement(base + "c", new FormColor(I18N.t("Color"), color));
}
/**
* Add an String
*
* @param name
* @param i
* @return
*/
public static FormCheckbox getBooleanFlag(final String name, final RubyObject holder, final int index, final int flag) {
final JavaTable table = new JavaTable(holder);
return (FormCheckbox) new FormCheckbox(name, (table.get(index, 0, 0) & flag) == flag).addChangeListener(new FormElementChangeListener() {
@Override
public void stateChanged(FormElement form) {
if (Boolean.parseBoolean(form.getContentAsString())) {
table.set(index, 0, 0, table.get(index, 0, 0) | flag);
} else {
table.set(index, 0, 0, table.get(index, 0, 0));
}
}
});
}
/**
* Add a boolean
*
* @param name
* @param holder
* @param index
* @return
*/
public static FormCheckbox getBoolean(final String name, final Object holder, final Object index) {
return (FormCheckbox) new FormCheckbox(name, ((RubyBoolean) RubyHelper.getObj(holder, index)).isTrue())
.addChangeListener(new FormElementChangeListener() {
@Override
public void stateChanged(FormElement form) {
RubyHelper.setObj(holder, index, new RubyBoolean(RubyHelper.getRunTime(holder, index), Boolean.parseBoolean(form.getContentAsString())));
}
});
}
/**
* Build a ForumCheckbox for an int (values: 0/1 )
*
* @param name
* @param object
* @return
*/
public static FormCheckbox getBooleanAsInt(final String name, final Object holder, final Object index) {
return (FormCheckbox) new FormCheckbox(name, RubyHelper.toInt(holder, index) == 1).addChangeListener(new FormElementChangeListener() {
@Override
public void stateChanged(FormElement form) {
RubyHelper.setNum(holder, index, Boolean.parseBoolean(form.getContentAsString()) ? 1 : 0);
}
});
}
/**
* Add an String
*
* @param name
* @param i
* @return
*/
public static FormElement getError(final String name, IRubyObject irb) {
String mess = irb.inspect().toString();
return new FormInfo(name, "@" + irb.getMetaClass() + " " + (mess.length() > 100 ? mess.substring(0, 100) + "..." : mess)).setInfoTxt(
I18N.t("Unbekannte Klasse"), "error");
}
/**
* Add an String
*
* @param name
* @param i
* @return
*/
public static FormElement getError(final String name, final String id, final RubyObject object) {
return getError(name, object.getInstanceVariable(id));
}
/**
* Add an String
*
* @param name
* @param i
* @return
*/
public static FormComboBox getComboBoxNum(final String name, final String[] values, final String[] titles, final Object holder, final Object index) {
return (FormComboBox) new FormComboBox(name, values, titles).selectField(RubyHelper.toString(holder, index)).addChangeListener(
new FormElementChangeListener() {
@Override
public void stateChanged(FormElement form) {
// set
RubyHelper.setNum(holder, index, form.getContentAsString());
}
});
}
/**
* Form to select the right event
*
* @param name
* @param map
* @param holder
* @param index
* @return
*/
public static FormComboBox getEventSelector(String name, RubyObject map, Object holder, Object index) {
String[] titles;
String[] values;
// has a map?
if (map == null) {
values = JavaHelper.numAry(-1, 100);
titles = JavaHelper.numAry(-1, 100);
titles[0] = "Player";
titles[1] = "This Event";
} else {
// get all events
RubyHash ra = (RubyHash) map.getInstanceVariable("@events");
// convert code
ArrayList<String> ids = new ArrayList<String>();
ArrayList<Long> ls = new ArrayList<Long>();
ids.add("Player");
ls.add(-1l);
ids.add("This Event");
ls.add(0l);
for (Object s : ra.keySet()) {
ls.add((Long) s);
ids.add(new SystemGObject((RubyObject) ra.get(s)).getName());
}
// convert
titles = new String[ids.size()];
values = new String[ids.size()];
for (int i = 0, l = ids.size(); i < l; i++) {
titles[i] = ids.get(i);
values[i] = ls.get(i).toString();
}
}
return getComboBoxNum(name, values, titles, holder, index);
}
/**
* Add an String
*
* @param name
* @param i
* @return
*/
public static FormComboBox getComboBox(final String name, final String[] values, final String[] titles, final IRubyObject irb) {
return (FormComboBox) new FormComboBox(name, values, titles).selectField(irb.toString()).addChangeListener(new FormElementChangeListener() {
@Override
public void stateChanged(FormElement form) {
// set
RubyHelper.setString(irb, form.getContentAsString());
}
});
}
}